package com.lancer.cloud.engine.aspect;

import java.lang.reflect.Proxy;

/**
 * 动态代理实例
 *
 * @author caijinbang
 * @date 2019-06-22 16:37
 */
public class DynamicProxyInstance {

    /**
     * 获取监控的代理实例
     * @param object
     * @param <T>
     * @return
     */
    public static <T> T getMonitorProxy(T object) {
        return getMonitorProxy(object, new Object[]{});
    }

    /**
     * 获取监控的代理实例
     *
     * @param obj
     * @param args
     * @param <T>
     * @return
     */
    @SuppressWarnings("unchecked")
    public static <T> T getMonitorProxy(T obj, Object[] args) {

        //用来指明生成代理对象使用哪个类装载器
        ClassLoader classLoader = obj.getClass().getClassLoader();
        //代理的接口组
        Class<?>[] interfaces = obj.getClass().getInterfaces();
        //调用处理器生成动态代理类实例
        MonitorProxyHandler monitorProxyHandler = new MonitorProxyHandler(obj, args);
        T t = (T) Proxy.newProxyInstance(classLoader, interfaces , monitorProxyHandler);
        return t;
    }


}
